package dao

import (
	"context"
	"fmt"
	"goadmin/conf"
	"time"

	goredis "github.com/redis/go-redis/v9"
)

var rdb *goredis.Client

func init() {
	rdb = goredis.NewClient(&goredis.Options{
		Addr:     fmt.Sprintf("%s:%d", conf.Redis.Host, conf.Redis.Port),
		Password: conf.Redis.Pwd,
		DB:       conf.Redis.Db,
	})
}

func GetRefreshToken(userId uint) (string, error) {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	return rdb.Get(ctx, fmt.Sprintf("%s%d", conf.Redis.RefreshTokenPrefix, userId)).Result()
}

func SetRefreshToken(userId uint, value string) error {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	if _, err := rdb.Set(ctx,
		fmt.Sprintf("%s%d", conf.Redis.RefreshTokenPrefix, userId),
		value, time.Duration(conf.Jwt.RefreshExpireHour)*time.Hour).Result(); err != nil {
		return err
	}
	return nil
}

func DelRefreshToken(userId uint) error {
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	if _, err := rdb.Del(ctx, fmt.Sprintf("%s%d", conf.Redis.RefreshTokenPrefix, userId)).Result(); err != nil {
		return err
	}
	return nil
}
